package modelo.catastrofe;

import java.util.ArrayList;
import modelo.Randomizador;
import modelo.interfaces.ConstruibleTerrestre;
import modelo.mapa.Mapa;
import modelo.mapa.Ubicacion;

public class Terremoto extends Catastrofe{
	
	private ArrayList<Ubicacion> ubicacionesAfectadas;

    public Terremoto()
    {
        super();
		ubicacionesAfectadas = new ArrayList<Ubicacion>();
    }
    
    public Terremoto(Ubicacion unaUbicacion)
    {
        super(unaUbicacion);
    }

    protected void afectar() 
	{
		this.ubicacionesAfectadas = new ArrayList<Ubicacion>();
		Ubicacion ubicacionDeLaConstruccionQueAfectara;
		ConstruibleTerrestre construccionQueAfectara;
		for (int i = 0 ; i < Mapa.getInstance().obtenerCantidadFilas() ; i++)
		{			
			for (int j = 0 ; j < Mapa.getInstance().obtenerCantidadColumnas() ; j++)
			{
				ubicacionDeLaConstruccionQueAfectara = new Ubicacion(i,j);	
				construccionQueAfectara = Mapa.getInstance().obtenerHectareaSegunUbicacion(ubicacionDeLaConstruccionQueAfectara).obtenerConstruccionTerrestre();
				this.daniar(construccionQueAfectara);				
			}						
		}		
	}

    protected void daniar(ConstruibleTerrestre construccionQueAfectara) 
    {       
        if (construccionQueAfectara != null)
        {
            double distanciaDelTerremotoALaConstruccion = (this.ubicacionDondeSeOrigina.getDistancia(construccionQueAfectara.obtenerUbicacion()));
            double danioDelTerremoto = (100-distanciaDelTerremotoALaConstruccion*1.5);
            if( (danioDelTerremoto) > 0)
            {
                construccionQueAfectara.recibirDanio(danioDelTerremoto);                             
				this.ubicacionesAfectadas.add(construccionQueAfectara.obtenerUbicacion());
            }
        }
    }

    @Override
    public Ubicacion obtenerUbicacionDeOrigenDeLaCatastrofe()
    {
        int coordXDeOrigen = (Randomizador.generarRandom(Mapa.getInstance().obtenerCantidadFilas()));
        int coordYDeOrigen = (Randomizador.generarRandom(Mapa.getInstance().obtenerCantidadColumnas()));
        return (new Ubicacion(coordXDeOrigen,coordYDeOrigen));        
    }

	public ArrayList<Ubicacion> obtenerListaDeAfectados()
	{
		return this.ubicacionesAfectadas;
	}
}